<?php
/**
 * マイページ　共通コントローラクラス<br />
 *
 * @package apamanshop
 * @author
 * @copyright
 */
abstract class Mypage_BaseController extends Apm_Controller_Base
{
    /** 表示テンプレートパス */
    protected $_display_path = null;

    /** URL */
    protected $_baseurl = null;
    protected $_sslurl = null;
    /** URL */
    protected $_aplbaseurl = null;

    /** パスワード問い合わせヘルパー */
    protected $_password_helper = null;
    protected $_password2_helper = null;

    /** マイページTOPヘルパー */
    protected $_menu_helper = null;

    /** マイページログインヘルパー */
    protected $_login_helper = null;

    /** マイページ新規登録ヘルパー */
    protected $_mypagereg_helper = null;

    /** マイページ新規登録確認ヘルパー */
    protected $_mypageregchk_helper = null;

    /** 物件比較ヘルパー */
    protected $_comparison_helper = null;

    /** 物件一覧ヘルパー */
    protected $_favoritelist_helper = null;

    /** 検索条件登録ヘルパー */
    protected $_searchlist_helper = null;

    /** ヘッダーヘルパー */
    protected $_header_helper = null;

    /** フッターヘルパー */
    protected $_footer_helper = null;

    /** サイドメニューヘルパー */
    protected $_sidemenu_helper = null;
    protected $_sidemenu_okiniiri_helper   = null;
    protected $_sidemenu_searchlist_helper = null;
	protected $_basic_leftpanel_helper     = null;    //左ペイン上部：基本条件
	protected $_kodawari_leftpanel_helper  = null;    //左ペイン上部：こだわり条件

    /** レコメンドヘルパー */
    protected  $_recommend_helper	= null;

    /** javascript(パスワード問い合わせ) */
    protected $_js_password_helper = null;
    protected $_js_password2_helper = null;

    /** javascript(マイページログイン) */
    protected $_js_login_helper = null;

    /** javascript(マイページ新規登録) */
    protected $_js_mypagereg_helper = null;

    /** javascript(マイページ新規登録確認) */
    protected $_js_mypageregchk_helper = null;

    /** 退会処理ヘルパー */
    protected $_quitIndex_helper = null;

    /** 退会確認ヘルパー */
    protected $_quitConfirm_helper = null;

    /** 退会キャンセルヘルパー */
    protected $_quitCancel_helper = null;

    /** 退会完了ヘルパー */
    protected $_quitEnd_helper = null;

    /** 検索条件一覧ヘルパー */
    protected $_paramlist_helper = null;

    /** javascript(退会処理ヘルパー) */
    protected $_js_quitIndex_helper = null;

    /** javascript(退会確認ヘルパー) */
    protected $_js_quitConfirm_helper = null;

    /** javascript(退会キャンセルヘルパー) */
    protected $_js_quitCancel_helper = null;

    /** javascript(退会完了ヘルパー) */
    protected $_js_quitEnd_helper = null;

    /** javascript(検索条件一覧ヘルパー) */
    protected $_js_paramlist_helper = null;

    /** javascript(サイドメニューヘルパー) */
    protected $_js_sidemenu_helper = null;

    /** javascript(お気に入り登録ヘルパー) */
    protected $_js_okiniiri_helper = null;
    /** javascript(検索条件登録ヘルパー) */
    protected $_js_joukenIns_helper = null;


    /**
     * 前処理
     */
    public function preDispatch()
    {
        $this->_baseurl      = $this->_config['apm']['baseurl'];
		$this->_sslurl       = $this->_config['apm']['ssl']['baseurl'];
        $this->_aplbaseurl   = $this->_config['apm']['apl']['static']['baseurl'];
		$this->_loginurl     = $this->_config['apm']['api']['login']['baseurl'];
		$this->_logouturl    = $this->_config['apm']['api']['logout']['baseurl'];

		//$this->_data['loginurl']  = $this->_loginurl;
		//$this->_data['logouturl'] = $this->_logouturl;
		$this->_data['baseurl']   = $this->_baseurl;
		$this->_data['sslurl']    = $this->_config['apm']['ssl']['baseurl'];

    	$this->_display_path = '';
    	$mypage_helper_path = APPLICATION_PATH . '/modules/mypage/views/helpers/';
        $common_helper_path = APPLICATION_PATH . '/modules/common/views/helpers/';

    	//=====ヘルパー設定=====
    	//===メイン関連===
    	//パスワード問い合わせ
        $this->_password_helper = $this->getApmHelper($mypage_helper_path . 'password_helper.tpl');
        //物件比較
        $this->_comparison_helper = $this->getApmHelper($mypage_helper_path . 'comparison_helper.tpl');
        //物件一覧
        $this->_favoritelist_helper = $this->getApmHelper($mypage_helper_path . 'favoritelist_helper.tpl');

        //検索条件登録
        $this->_searchlist_helper = $this->getApmHelper($mypage_helper_path . 'searchlist_helper.tpl');


        //マイページTOP
        $this->_menu_helper = $this->getApmHelper($mypage_helper_path . 'menu_helper.tpl');

        //マイページログイン
        $this->_login_helper = $this->getApmHelper($mypage_helper_path . 'login_helper.tpl');

        //マイページ新規登録
        $this->_mypagereg_helper = $this->getApmHelper($mypage_helper_path . 'mypagereg_helper.tpl');

        //マイページ新規登録確認
        $this->_mypagecnf_helper = $this->getApmHelper($mypage_helper_path . 'mypagecnf_helper.tpl');

        //マイページ新規登録完了
        $this->_mypagefin_helper = $this->getApmHelper($mypage_helper_path . 'mypagefin_helper.tpl');

        //マイページ変更登録
        $this->_mypageregre_helper = $this->getApmHelper($mypage_helper_path . 'mypageregre_helper.tpl');
        //マイページ変更完了
        $this->_mypagefinre_helper = $this->getApmHelper($mypage_helper_path . 'mypagefinre_helper.tpl');


    	//退会処理
        $this->_quitIndex_helper = $this->getApmHelper($mypage_helper_path . 'quitIndex_helper.tpl');

		//退会確認
        $this->_quitConfirm_helper = $this->getApmHelper($mypage_helper_path . 'quitConfirm_helper.tpl');

		//退会キャンセル
        $this->_quitCancel_helper = $this->getApmHelper($mypage_helper_path . 'quitCancel_helper.tpl');

		//退会完了
        $this->_quitEnd_helper = $this->getApmHelper($mypage_helper_path . 'quitEnd_helper.tpl');

		//検索条件一覧
        $this->_paramlist_helper = $this->getApmHelper($mypage_helper_path . 'paramlist_helper.tpl');

        //レコメンド
        $this->_recommend_helper = $this->getApmHelper('menu_recommend_helper.tpl');

    	//===共通===
    	//サイドメニュー
		$this->_sidemenu_helper = $this->getApmHelper($mypage_helper_path . 'common/' . 'sidemenu.tpl');
		$this->_sidemenu_okiniiri_helper = $this->getApmHelper($mypage_helper_path . 'common/' . 'menu_okiniiri_cnt.tpl');
		$this->_sidemenu_searchlist_helper = $this->getApmHelper($mypage_helper_path . 'common/' . 'menu_search_list.tpl');
    	$this->_basic_leftpanel_helper     = $this->getApmHelper('search/views/helpers/selbasic_leftpanel.tpl');     //左ペイン中部：基本条件
        $this->_kodawari_leftpanel_helper  = $this->getApmHelper('search/views/helpers/selkodawari_leftpanel.tpl');  //左ペイン下部：こだわり条件

        //===javascript===
        //パスワード問い合わせ
		$this->_js_password_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'password.tpl');
		$this->_js_password2_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'password2.tpl');

    	//マイページログイン
		$this->_js_login_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'login.tpl');

    	//マイページ新規登録
		$this->_js_mypagereg_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'mypagereg.tpl');

    	//マイページ新規登録確認
		$this->_js_mypagecnf_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'mypagecnf.tpl');

    	//マイページ新規登録完了
		$this->_js_mypagefin_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'mypagefin.tpl');

    	//マイページ変更登録
		$this->_js_mypageregre_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'mypageregre.tpl');
    	//マイページ新規登録完了
		$this->_js_mypagefinre_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'mypagefinre.tpl');


    	//退会
		$this->_js_quitIndex_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'quit.tpl');

    	//退会確認
		$this->_js_quitConfirm_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'quit_confirm.tpl');

    	//退会キャンセル
		$this->_js_quitCancel_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'quit_cancel.tpl');

    	//退会完了
		$this->_js_quitEnd_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'quit_end.tpl');

    	//検索条件一覧
		$this->_js_paramlist_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'paramlist_helper.tpl');

		//サイドメニュー
		$this->_js_sidemenu_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'menu.tpl');

		//お気に入り登録js
		$this->_js_okiniiri_helper = $this->getApmHelper($mypage_helper_path . 'js/' . 'okiniiri.tpl');

		//検索条件登録js
		$this->_js_joukenIns_helper = $this->getApmHelper($mypage_helper_path . 'js/' . '/jouken.tpl');

        //=====パラメータの取得=====
        $this->_params = $this->getParameters();
        // パラメータのhiddenタグ生成
        $this->_data['hiddenTag'] = Apm_Util::generateHiddenTag($this->_params);

		// アンカー設定
		$this->setAnchorLink2();

    }

    /**
     * 各Block設定
     * @param unknown_type $helper ヘルパー
     */
    protected function setBlock($helper = '',$jsHelper = '')
    {
        $block = array();

        // メインBLOCK設定（引数が無い場合は空文字で設定）
        $block['main'] = (is_string($helper)) ? $helper : $helper->getBlock($this->_data);

        // 共通

        // javascriptBLOCK設定（引数が無い場合は空文字で設定）
        $block['js'] = (is_string($jsHelper)) ? $jsHelper : $jsHelper->getBlock($this->_data);

        $this->_data['block'] = $block;
    }

    /**
     * (non-PHPdoc)
     * @see Apm_Controller_Base::setTitle()
     */
    protected function setTitle($title)
    {
    	parent::setTitle($title);
    	$this->_data['title'] = $title;
    }

    /**
     * (non-PHPdoc)
     * @see Apm_Controller_Base::setDescription()
     */
    protected function setDescription($description)
    {
    	parent::setDescription($description);
    	$this->_data['description'] = $description;
    }

    /**
     * (non-PHPdoc)
     * @see Apm_Controller_Base::setKeywords()
     */
    protected function setKeywords($keywords)
    {
    	parent::setKeywords($keywords);
    	$this->_data['keywords'] = $keywords;
    }

    /**
     * ヘッダタイトル設定
     *
     * @param string $headerTitle ヘッダタイトル
     */
    protected function setHeaderTitle($headerTitle)
    {
    	$this->_data['headerTitle'] = $headerTitle;
    }

    /**
     * メインクラスを設定
     *
     * @param string $mainClass メインクラス
     */
    protected function setMainClass($mainClass)
    {
    	$this->_data['mainClass'] = $mainClass;
    }


    /**
     * コンテンツタイトルを設定
     *
     * @param string $contentsTitle コンテンツタイトル
     * @param string $contentsTitleClass コンテンツタイトルクラス
     */
    protected function setContentsTitle($contentsTitle, $contentsTitleClass)
    {
    	$this->_data['contentsTitle'] = $contentsTitle;
    	$this->_data['contentsTitleClass'] = $contentsTitleClass;
    }

    /**
     * サイドメニュー設定
     * @param string $uid ユーザＩＤ
     * @param boolean $expand 展開するか(true:展開する  false:展開しない)
     */
    protected function setSideMenu($uid, $expand = true)
    {
    	//=====モデルインスタンス=====
    	//サイドメニュー
    	$model_side_menu = new Mypage_Model_MakeSideMenu();
    	//検索条件
    	$model_jouken = new Mypage_Model_Paraminsert();

		//=====お気に入り物件、検索条件=====
		//お気に入り物件数の取得
		$model_side_menu->getFavoriteCntMenu($uid, $this->_data);
		$this->_data['sidemenu_favorite'] = $this->_sidemenu_okiniiri_helper->getBlock($this->_data);
		
		//検索条件の取得（ログイン時のみ）
    	if (!Apm_Otheritems::IsNullOrEmpty($uid))
    	{
			$model_side_menu->getSearchListMenu($uid, $this->_params, $this->_data);
			$this->_data['sidemenu_searchlist'] = $this->_sidemenu_searchlist_helper->getBlock($this->_data);
    	}

		$loader = new Zend_Application_Module_Autoloader(array(
			'namespace' => 'Search',
			'basePath' => APPLICATION_PATH . '/modules/search',
		));
		//=====キャンペーン=====
		$model_campaign = new Search_Model_Campaignsearch();
		$this->_data['campaign'] = $model_campaign->getCampaignsearch();
		$model_campaign->convertData2($this->_params, $this->_data);
		//$this->_data['side_campaign'] = $model_side_menu->getSideCampaign($this->_params);
    	//展開する場合のみデータ取得
    	if ($expand == true)
    	{
			//=====基本条件関連=====
			$model_basic = new Search_Model_Basicjyoken();
			$this->_data['basic'] = $model_basic->setChecked($this->_params);
			//$this->_data['side_basic'] = $model_side_menu->getSideBasic($this->_params);

			//=====こだわり条件=====
			$model_kodawari = new Search_Model_Kodawarijyoken();
			$this->_data['kodawari'] = $model_kodawari->getKodawariJyoken($this->_params);
			$model_kodawari->convertKodawariData($this->_params, $this->_data);
			//$this->_data['side_kodawari'] = $model_side_menu->getSideKodawariJyoken($this->_params);

			// 「初期費用」、「基本条件」、「こだわり条件」を開く
			$this->_data['left_basic_display_flg']    = false;
			$this->_data['left_kodawari_display_flg'] = false;
			$this->_data['left_cost_display_flg']     = false;
			
			// 2011/02/22 検索ボタン追加対応
			// 検索ボタン表示
			$this->_data['dsp_serch_btn'] = true;
    	}
		else
		{
			// 「初期費用」、「基本条件」、「こだわり条件」を閉じる
			$this->_data['left_basic_display_flg']    = true;
			$this->_data['left_kodawari_display_flg'] = true;
			$this->_data['left_cost_display_flg']     = true;
			
			// 2011/02/22 検索ボタン追加対応
			// 検索ボタン非表示
			$this->_data['dsp_serch_btn'] = false;
		}

    	//展開するかしないか
    	//$this->_data['expand'] = $expand;

    	$this->_data['uid'] = $uid;
		
    	//サイドメニューヘルパーの設定
		$this->_data['sidemenu_basic'] = $this->_basic_leftpanel_helper->getBlock($this->_data);
		$this->_data['sidemenu_kodawari'] = $this->_kodawari_leftpanel_helper->getBlock($this->_data);
    	$this->_data['sidemenu'] = $this->_sidemenu_helper->getBlock($this->_data);
    	$block = array();
    	$block['sidejs'] = (is_string($this->_js_sidemenu_helper)) ? $this->_js_sidemenu_helper : $this->_js_sidemenu_helper->getBlock($this->_data);
    	$this->_data['block2'] = $block;
    }



    //TODO:==============================ここ以降はちょっと微妙かも==============================

    /**
     * bodyタグのonloadに追加するスクリプト
     *
     * @param string $script スクリプト
     */
    protected function setOnLoadBodyScript($script)
    {
		$this->_data['bodyOnloadScript'] = $script;
    }

    /**
     * Cookieへのお気に入り登録済みの部屋コードの配列を取得
     *
     * @return Cookieへのお気に入り登録済みの部屋コードの配列
     */
    protected function getFavoriteCookie()
    {
		$result = array();

		// 登録件数
		$strLiteCnt = $_COOKIE["AP_LITE_CNT"];
		if ($strLiteCnt == ""){
			$strLiteCnt=0;
		}

		// 物件データCookieを連想配列で取得
		$cookieArray = $this->getCookieAll("AP_LITE",$strLiteCnt);
		if(empty($cookieArray)){
			// キーで昇順ソート
			ksort($cookieArray);
		}

		for ($i = 0; $i < count($cookieArray); $i++ )
		{
			$result[$i] = $cookieArray["Bukken" . ($i + 1)];
		}
		return $result;
    }

	/**
	*	サブキーを20以上持つCookieデータをまとめて取得
	*
	*	サブキーをインデックスにした連想配列を返す
	*
	*	strName：Cookieの名称
	*/
	protected function getCookieAll($strName, $maxCnt)
	{
		$result = array();

		$cookieCnt = (int)($maxCnt / Apm_Config_Rstdtl::MAX_CNT_SUBKEY) + 1;

		for($i=1;$i <= $cookieCnt; $i++){
			$temp = $this->getCookie($strName.$i);

			foreach($temp as $key => $value){
				$result[$key] = $value;
			}
		}

		return $result;
	}

	/**
	*	Cookieデータ取得
	*	サブキーをインデックスにした連想配列を返す
	*
	*	strName：Cookieの名称
	*/
	public function getCookie($strName)
	{
		$result = array();

		$cookieVal = $_COOKIE[$strName];

		$cookieArray = explode("&",$cookieVal);

		// 物件別データを連想配列に格納
		foreach($cookieArray as $bukenData ){
			// Cookieサブキーと値を分割
			$temp = explode("=",$bukenData);
			// 連想配列に格納
			$tempArray[$temp[0]] = $temp[1];
		}

		// 空要素削除
		$result = array_diff( $tempArray, array( "" ) );

		return $result;
	}
}
?>
